library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages --------------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.3     v purrr   0.3.4
v tibble  3.0.5     v dplyr   1.0.3
v tidyr   1.1.2     v stringr 1.4.0
v readr   1.4.0     v forcats 0.5.1
-- Conflicts ------------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(plotly)
package 㤼㸱plotly㤼㸲 was built under R version 4.0.4Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: 㤼㸱plotly㤼㸲

The following object is masked from 㤼㸱package:ggplot2㤼㸲:

    last_plot

The following object is masked from 㤼㸱package:stats㤼㸲:

    filter

The following object is masked from 㤼㸱package:graphics㤼㸲:

    layout
library(lubridate)

Attaching package: 㤼㸱lubridate㤼㸲

The following objects are masked from 㤼㸱package:base㤼㸲:

    date, intersect, setdiff, union
library(ggplot2)
library(gganimate)
package 㤼㸱gganimate㤼㸲 was built under R version 4.0.4
library(devtools)
package 㤼㸱devtools㤼㸲 was built under R version 4.0.4Loading required package: usethis
library(gifski)
package 㤼㸱gifski㤼㸲 was built under R version 4.0.4
library(png)
library(leaflet)
package 㤼㸱leaflet㤼㸲 was built under R version 4.0.4
library(readr)
table_01_71q113 <- read.csv("table_01_71q113.csv", stringsAsFactors = TRUE)

##Notes:

#The Roadway Congestion Index (RCI) is a measure of vehicle travel density on major roadways in an urban area. An RCI exceeding 1.0 indicates an undesirable congestion level, on an average, on the freeways and principal arterial street systems during the peak period. The urban areas included are those containing over 500,000 people and several smaller places mostly chosen by previous sponsors of the Texas Transportation Institute study on mobility. Population group is based on 2010 population.

##Source:

#Texas Transportation Institute, Congestion Data for Your City, Excel spreadsheet of the base statistics for the 101 urban areas and population group summary statistics (College Station, TX: 2012), available at http://mobility.tamu.edu as of Feb. 6, 2013.

##Description:

#KEY: NA = not applicable; R = revised.

#Very large urban areas – 3 million and over population.

#Large urban areas – 1 million to less than 3 million population.

#Medium urban areas – 500,000 to less than 1 million population.

#Small urban areas – less than 500,000 population.

#a Rank is based on the calculated point change with the highest number corresponding #to a rank of 1.

#b Average weighted by vehicle miles traveled in city.

transp <- table_01_71q113
transp
transp$yg1 <- c("X1982", "X1992", "X2002")
transp$yg1 <- yg1
transp
large_p <- c("Dallas -Fort Worth-Arlington, TX","Chicago, IL-IN","Boston, MA-NH-RI", "Atlanta, GA", "Detroit, MI", "Houston, TX", "Los Angeles-Long Beach-Santa Ana, CA", "Miami, FL","New York-Newark, NY-NJ-CT","Philadelphia, PA-NJ-DE-MD","Phoenix, AZ","San Diego, CA","San Francisco-Oakland, CA","Seattle, WA", "Washington, DC-VA-MD")
Large_selected_cities <- subset(transp, subset = 
Urban.area %in% large_p)
Large_selected_cities
lscP=ggplot(Large_selected_cities,
Warning messages:
1: In readChar(file, size, TRUE) : truncating string with embedded nuls
2: In readChar(file, size, TRUE) : truncating string with embedded nuls
3: In readChar(file, size, TRUE) : truncating string with embedded nuls
4: In readChar(file, size, TRUE) : truncating string with embedded nuls
            mapping = aes(x =yg1, fill =Urban.area)) +
  geom_density(alpha = .5, fill = 5) +
   labs(title = "Figure 1 Congestion  Grown in U.S. very larger cities Over the Past 20 Years",
                    x = "20 Years",
                    y = "Hours Delayper Traveler",
        caption = "source:Texas Transportation Institute")
ggplotly(lscP)
#ggsave(file = "Congestion_G_USA.png", plot = lscP)
tr <- ggplot(data =transp, mapping = aes(x=Urban.area, 
                                         y = Population.group)) +
  geom_point(color = "green") +
  theme(axis.text.x = element_text(angle =90)) +
  labs(title = "Figure 2 Distribution of Population Group by Urban Area",
       x = "Urban Area",
       y = " Population Group",
       caption = " Source:Texas Transportation Institute")
ggplotly(tr)
#ggsave(file = "PopGroup_UrbaArea.png", plot = tr)
trL <- ggplot(data =transp, mapping = aes(x=Urban.area, 
                                         y = Population.group)) +
  geom_point(color = "green") +
  theme(axis.text.x = element_text(size =5, angle =90)) +
  labs(title = "Figure 2 Distribution of Population Group by Urban Area",
       x = "Urban Area",
       y = " Population Group",
       caption = " Source:Texas Transportation Institute")
ggplotly(trL)
ggsave(file = "PopGroup_UrbaAreatrL.png", plot = trL)
Saving 7.29 x 4.5 in image

trc <- ggplot(data = transp, aes(x = Population.group, fill = factor(yg1))) +
  geom_bar(position = "dodge", mapping = aes(y = ..prop.., group = factor(yg1))) +
  labs(title = "Figure 3 Growing Congestion in U.S. cities Over the Past 20 Years",
                    x = "Population Area Size",
                    y = "Hours Delayper Traveler",
       caption = "source:Texas Transportation Institute")
ggplotly(trc)
#ggsave(file = "GrowCongUS20Year.png", plot = trc)
trcL <- ggplot(data = transp, aes(x = Population.group, fill = factor(yg1))) +
  geom_bar(position = "dodge", mapping = aes(y = ..prop.., group = factor(yg1))) +
  labs(title = "Figure 3 Growing Congestion in U.S. cities Over the Past 20 Years",
                    x = "Population Area Size",
                    y = "Hours Delayper Traveler",
       caption = "source:Texas Transportation Institute")
ggplotly(trcL)
ggsave(file = "GrowCongUS20YearL.png", plot = trcL)
Saving 7.29 x 4.5 in image

pbox <- ggplot(transp, aes(x = Population.group, y = X.R..2010, fill = Population.group)) + geom_boxplot() +
  theme(legend.position = "none") +
  labs(title = "Population Group in 2010",
       subtitle = "Congestion grow 0-1",
       x = "Population Group",
       y = "congestion in 2010",
       caption = "source:Texas Transportation Institute")
ggplotly(pbox)
#ggsave(file = "Pop2010.png", plot = pbox)
pboxL <- ggplot(transp, aes(x = Population.group, y = X.R..2010, fill = Population.group)) + geom_boxplot() +
  theme(legend.position = "none") +
  labs(title = "Population Group in 2010",
       subtitle = "Congestion grow 0-1",
       x = "Population Group",
       y = "congestion in 2010",
       caption = "source:Texas Transportation Institute")
ggplotly(pboxL)
ggsave(file = "Pop2010L.png", plot = pboxL)
Saving 7.29 x 4.5 in image

summary(transp$Population.group)
 439 Areas      Large     Medium      Small Very large Very Large 
         1         30         34         22         14          1 
transp$Population.group <- recode(transp$Population.group,
                                  "439 Areas" = "NA",
                          "Very large" = "Very Large",
                          "Very Large" = "Very Large",
                          "Large" = "Large", 
                          "Medium" = "Medium",
                          "Small" = "Small") 
summary(transp$Population.group)
        NA      Large     Medium      Small Very Large 
         1         30         34         22         15 
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShwbG90bHkpDQoNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ2FuaW1hdGUpDQpsaWJyYXJ5KGRldnRvb2xzKQ0KbGlicmFyeShnaWZza2kpDQpsaWJyYXJ5KHBuZykNCmxpYnJhcnkobGVhZmxldCkNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkcikNCnRhYmxlXzAxXzcxcTExMyA8LSByZWFkLmNzdigidGFibGVfMDFfNzFxMTEzLmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFKQ0KYGBgDQoNCiMjTm90ZXM6DQoNCiNUaGUgUm9hZHdheSBDb25nZXN0aW9uIEluZGV4IChSQ0kpIGlzIGEgbWVhc3VyZSBvZiB2ZWhpY2xlIHRyYXZlbCBkZW5zaXR5IG9uIG1ham9yIHJvYWR3YXlzIGluIGFuIHVyYmFuIGFyZWEuIEFuIFJDSSBleGNlZWRpbmcgMS4wIGluZGljYXRlcyBhbiB1bmRlc2lyYWJsZSBjb25nZXN0aW9uIGxldmVsLCBvbiBhbiBhdmVyYWdlLCBvbiB0aGUgZnJlZXdheXMgYW5kIHByaW5jaXBhbCBhcnRlcmlhbCBzdHJlZXQgc3lzdGVtcyBkdXJpbmcgdGhlIHBlYWsgcGVyaW9kLiBUaGUgdXJiYW4gYXJlYXMgaW5jbHVkZWQgYXJlIHRob3NlIGNvbnRhaW5pbmcgb3ZlciA1MDAsMDAwIHBlb3BsZSBhbmQgc2V2ZXJhbCBzbWFsbGVyIHBsYWNlcyBtb3N0bHkgY2hvc2VuIGJ5IHByZXZpb3VzIHNwb25zb3JzIG9mIHRoZSBUZXhhcyBUcmFuc3BvcnRhdGlvbiBJbnN0aXR1dGUgc3R1ZHkgb24gbW9iaWxpdHkuIFBvcHVsYXRpb24gZ3JvdXAgaXMgYmFzZWQgb24gMjAxMCBwb3B1bGF0aW9uLg0KDQoNCg0KIyNTb3VyY2U6DQoNCiNUZXhhcyBUcmFuc3BvcnRhdGlvbiBJbnN0aXR1dGUsIENvbmdlc3Rpb24gRGF0YSBmb3IgWW91ciBDaXR5LCBFeGNlbCBzcHJlYWRzaGVldCBvZiB0aGUgYmFzZSBzdGF0aXN0aWNzIGZvciB0aGUgMTAxIHVyYmFuIGFyZWFzIGFuZCBwb3B1bGF0aW9uIGdyb3VwIHN1bW1hcnkgc3RhdGlzdGljcyAoQ29sbGVnZSBTdGF0aW9uLCBUWDogMjAxMiksIGF2YWlsYWJsZSBhdCBodHRwOi8vbW9iaWxpdHkudGFtdS5lZHUgYXMgb2YgRmViLiA2LCAyMDEzLg0KDQojI0Rlc2NyaXB0aW9uOg0KDQojS0VZOiBOQSA9IG5vdCBhcHBsaWNhYmxlOyBSID0gcmV2aXNlZC4NCg0KI1ZlcnkgbGFyZ2UgdXJiYW4gYXJlYXMg4oCTIDMgbWlsbGlvbiBhbmQgb3ZlciBwb3B1bGF0aW9uLg0KDQojTGFyZ2UgdXJiYW4gYXJlYXMg4oCTIDEgbWlsbGlvbiB0byBsZXNzIHRoYW4gMyBtaWxsaW9uIHBvcHVsYXRpb24uDQoNCiNNZWRpdW0gdXJiYW4gYXJlYXMg4oCTIDUwMCwwMDAgdG8gbGVzcyB0aGFuIDEgbWlsbGlvbiBwb3B1bGF0aW9uLg0KDQojU21hbGwgdXJiYW4gYXJlYXMg4oCTIGxlc3MgdGhhbiA1MDAsMDAwIHBvcHVsYXRpb24uDQoNCiNhIFJhbmsgaXMgYmFzZWQgb24gdGhlIGNhbGN1bGF0ZWQgcG9pbnQgY2hhbmdlIHdpdGggdGhlIGhpZ2hlc3QgbnVtYmVyIGNvcnJlc3BvbmRpbmcgI3RvIGEgcmFuayBvZiAxLg0KDQojYiBBdmVyYWdlIHdlaWdodGVkIGJ5IHZlaGljbGUgbWlsZXMgdHJhdmVsZWQgaW4gY2l0eS4NCg0KYGBge3J9DQp0cmFuc3AgPC0gdGFibGVfMDFfNzFxMTEzDQp0cmFuc3ANCmBgYA0KDQpgYGB7cn0NCnRyYW5zcCR5ZzEgPC0gYygiWDE5ODIiLCAiWDE5OTIiLCAiWDIwMDIiKQ0KYGBgDQoNCmBgYHtyfQ0KdHJhbnNwJHlnMSA8LSB5ZzENCnRyYW5zcA0KYGBgDQoNCg0KYGBge3J9DQpsYXJnZV9wIDwtIGMoIkRhbGxhcyAtRm9ydCBXb3J0aC1Bcmxpbmd0b24sIFRYIiwiQ2hpY2FnbywgSUwtSU4iLCJCb3N0b24sIE1BLU5ILVJJIiwgIkF0bGFudGEsIEdBIiwgIkRldHJvaXQsIE1JIiwgIkhvdXN0b24sIFRYIiwgIkxvcyBBbmdlbGVzLUxvbmcgQmVhY2gtU2FudGEgQW5hLCBDQSIsICJNaWFtaSwgRkwiLCJOZXcgWW9yay1OZXdhcmssIE5ZLU5KLUNUIiwiUGhpbGFkZWxwaGlhLCBQQS1OSi1ERS1NRCIsIlBob2VuaXgsIEFaIiwiU2FuIERpZWdvLCBDQSIsIlNhbiBGcmFuY2lzY28tT2FrbGFuZCwgQ0EiLCJTZWF0dGxlLCBXQSIsICJXYXNoaW5ndG9uLCBEQy1WQS1NRCIpDQpgYGANCg0KYGBge3J9DQpMYXJnZV9zZWxlY3RlZF9jaXRpZXMgPC0gc3Vic2V0KHRyYW5zcCwgc3Vic2V0ID0gDQpVcmJhbi5hcmVhICVpbiUgbGFyZ2VfcCkNCmBgYA0KDQpgYGB7cn0NCkxhcmdlX3NlbGVjdGVkX2NpdGllcw0KYGBgDQoNCg0KYGBge3J9DQpsc2NQPWdncGxvdChMYXJnZV9zZWxlY3RlZF9jaXRpZXMsDQogICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPXlnMSwgZmlsbCA9VXJiYW4uYXJlYSkpICsNCiAgZ2VvbV9kZW5zaXR5KGFscGhhID0gLjUsIGZpbGwgPSA1KSArDQogICBsYWJzKHRpdGxlID0gIkZpZ3VyZSAxIENvbmdlc3Rpb24gIEdyb3duIGluIFUuUy4gdmVyeSBsYXJnZXIgY2l0aWVzIE92ZXIgdGhlIFBhc3QgMjAgWWVhcnMiLA0KICAgICAgICAgICAgICAgICAgICB4ID0gIjIwIFllYXJzIiwNCiAgICAgICAgICAgICAgICAgICAgeSA9ICJIb3VycyBEZWxheXBlciBUcmF2ZWxlciIsDQogICAgICAgIGNhcHRpb24gPSAic291cmNlOlRleGFzIFRyYW5zcG9ydGF0aW9uIEluc3RpdHV0ZSIpDQpnZ3Bsb3RseShsc2NQKQ0KI2dnc2F2ZShmaWxlID0gIkNvbmdlc3Rpb25fR19VU0EucG5nIiwgcGxvdCA9IGxzY1ApDQpgYGANCg0KDQpgYGB7cn0NCnRyIDwtIGdncGxvdChkYXRhID10cmFuc3AsIG1hcHBpbmcgPSBhZXMoeD1VcmJhbi5hcmVhLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IFBvcHVsYXRpb24uZ3JvdXApKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAiZ3JlZW4iKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID05MCkpICsNCiAgbGFicyh0aXRsZSA9ICJGaWd1cmUgMiBEaXN0cmlidXRpb24gb2YgUG9wdWxhdGlvbiBHcm91cCBieSBVcmJhbiBBcmVhIiwNCiAgICAgICB4ID0gIlVyYmFuIEFyZWEiLA0KICAgICAgIHkgPSAiIFBvcHVsYXRpb24gR3JvdXAiLA0KICAgICAgIGNhcHRpb24gPSAiIFNvdXJjZTpUZXhhcyBUcmFuc3BvcnRhdGlvbiBJbnN0aXR1dGUiKQ0KZ2dwbG90bHkodHIpDQojZ2dzYXZlKGZpbGUgPSAiUG9wR3JvdXBfVXJiYUFyZWEucG5nIiwgcGxvdCA9IHRyKQ0KYGBgDQoNCmBgYHtyfQ0KdHJMIDwtIGdncGxvdChkYXRhID10cmFuc3AsIG1hcHBpbmcgPSBhZXMoeD1VcmJhbi5hcmVhLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IFBvcHVsYXRpb24uZ3JvdXApKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAiZ3JlZW4iKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPTUsIGFuZ2xlID05MCkpICsNCiAgbGFicyh0aXRsZSA9ICJGaWd1cmUgMiBEaXN0cmlidXRpb24gb2YgUG9wdWxhdGlvbiBHcm91cCBieSBVcmJhbiBBcmVhIiwNCiAgICAgICB4ID0gIlVyYmFuIEFyZWEiLA0KICAgICAgIHkgPSAiIFBvcHVsYXRpb24gR3JvdXAiLA0KICAgICAgIGNhcHRpb24gPSAiIFNvdXJjZTpUZXhhcyBUcmFuc3BvcnRhdGlvbiBJbnN0aXR1dGUiKQ0KZ2dwbG90bHkodHJMKQ0KZ2dzYXZlKGZpbGUgPSAiUG9wR3JvdXBfVXJiYUFyZWF0ckwucG5nIiwgcGxvdCA9IHRyTCkNCmBgYA0KIA0KDQpgYGB7cn0NCnRyYyA8LSBnZ3Bsb3QoZGF0YSA9IHRyYW5zcCwgYWVzKHggPSBQb3B1bGF0aW9uLmdyb3VwLCBmaWxsID0gZmFjdG9yKHlnMSkpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIiwgbWFwcGluZyA9IGFlcyh5ID0gLi5wcm9wLi4sIGdyb3VwID0gZmFjdG9yKHlnMSkpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJlIDMgR3Jvd2luZyBDb25nZXN0aW9uIGluIFUuUy4gY2l0aWVzIE92ZXIgdGhlIFBhc3QgMjAgWWVhcnMiLA0KICAgICAgICAgICAgICAgICAgICB4ID0gIlBvcHVsYXRpb24gQXJlYSBTaXplIiwNCiAgICAgICAgICAgICAgICAgICAgeSA9ICJIb3VycyBEZWxheXBlciBUcmF2ZWxlciIsDQogICAgICAgY2FwdGlvbiA9ICJzb3VyY2U6VGV4YXMgVHJhbnNwb3J0YXRpb24gSW5zdGl0dXRlIikNCmdncGxvdGx5KHRyYykNCiNnZ3NhdmUoZmlsZSA9ICJHcm93Q29uZ1VTMjBZZWFyLnBuZyIsIHBsb3QgPSB0cmMpDQpgYGANCiANCmBgYHtyfQ0KdHJjTCA8LSBnZ3Bsb3QoZGF0YSA9IHRyYW5zcCwgYWVzKHggPSBQb3B1bGF0aW9uLmdyb3VwLCBmaWxsID0gZmFjdG9yKHlnMSkpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIiwgbWFwcGluZyA9IGFlcyh5ID0gLi5wcm9wLi4sIGdyb3VwID0gZmFjdG9yKHlnMSkpKSArDQogIGxhYnModGl0bGUgPSAiRmlndXJlIDMgR3Jvd2luZyBDb25nZXN0aW9uIGluIFUuUy4gY2l0aWVzIE92ZXIgdGhlIFBhc3QgMjAgWWVhcnMiLA0KICAgICAgICAgICAgICAgICAgICB4ID0gIlBvcHVsYXRpb24gQXJlYSBTaXplIiwNCiAgICAgICAgICAgICAgICAgICAgeSA9ICJIb3VycyBEZWxheXBlciBUcmF2ZWxlciIsDQogICAgICAgY2FwdGlvbiA9ICJzb3VyY2U6VGV4YXMgVHJhbnNwb3J0YXRpb24gSW5zdGl0dXRlIikNCmdncGxvdGx5KHRyY0wpDQpnZ3NhdmUoZmlsZSA9ICJHcm93Q29uZ1VTMjBZZWFyTC5wbmciLCBwbG90ID0gdHJjTCkNCmBgYA0KIA0KDQpgYGB7cn0NCnBib3ggPC0gZ2dwbG90KHRyYW5zcCwgYWVzKHggPSBQb3B1bGF0aW9uLmdyb3VwLCB5ID0gWC5SLi4yMDEwLCBmaWxsID0gUG9wdWxhdGlvbi5ncm91cCkpICsgZ2VvbV9ib3hwbG90KCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsNCiAgbGFicyh0aXRsZSA9ICJQb3B1bGF0aW9uIEdyb3VwIGluIDIwMTAiLA0KICAgICAgIHN1YnRpdGxlID0gIkNvbmdlc3Rpb24gZ3JvdyAwLTEiLA0KICAgICAgIHggPSAiUG9wdWxhdGlvbiBHcm91cCIsDQogICAgICAgeSA9ICJjb25nZXN0aW9uIGluIDIwMTAiLA0KICAgICAgIGNhcHRpb24gPSAic291cmNlOlRleGFzIFRyYW5zcG9ydGF0aW9uIEluc3RpdHV0ZSIpDQpnZ3Bsb3RseShwYm94KQ0KI2dnc2F2ZShmaWxlID0gIlBvcDIwMTAucG5nIiwgcGxvdCA9IHBib3gpDQpgYGANCg0KYGBge3J9DQpwYm94TCA8LSBnZ3Bsb3QodHJhbnNwLCBhZXMoeCA9IFBvcHVsYXRpb24uZ3JvdXAsIHkgPSBYLlIuLjIwMTAsIGZpbGwgPSBQb3B1bGF0aW9uLmdyb3VwKSkgKyBnZW9tX2JveHBsb3QoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBsYWJzKHRpdGxlID0gIlBvcHVsYXRpb24gR3JvdXAgaW4gMjAxMCIsDQogICAgICAgc3VidGl0bGUgPSAiQ29uZ2VzdGlvbiBncm93IDAtMSIsDQogICAgICAgeCA9ICJQb3B1bGF0aW9uIEdyb3VwIiwNCiAgICAgICB5ID0gImNvbmdlc3Rpb24gaW4gMjAxMCIsDQogICAgICAgY2FwdGlvbiA9ICJzb3VyY2U6VGV4YXMgVHJhbnNwb3J0YXRpb24gSW5zdGl0dXRlIikNCmdncGxvdGx5KHBib3hMKQ0KZ2dzYXZlKGZpbGUgPSAiUG9wMjAxMEwucG5nIiwgcGxvdCA9IHBib3hMKQ0KYGBgDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHRyYW5zcCRQb3B1bGF0aW9uLmdyb3VwKQ0KYGBgDQoNCmBgYHtyfQ0KdHJhbnNwJFBvcHVsYXRpb24uZ3JvdXAgPC0gcmVjb2RlKHRyYW5zcCRQb3B1bGF0aW9uLmdyb3VwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0MzkgQXJlYXMiID0gIk5BIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlZlcnkgbGFyZ2UiID0gIlZlcnkgTGFyZ2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiVmVyeSBMYXJnZSIgPSAiVmVyeSBMYXJnZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICJMYXJnZSIgPSAiTGFyZ2UiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIk1lZGl1bSIgPSAiTWVkaXVtIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlNtYWxsIiA9ICJTbWFsbCIpIA0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyeSh0cmFuc3AkUG9wdWxhdGlvbi5ncm91cCkNCmBgYA0KDQo=